package com.Drools.test;

import com.Drools.entity.Order;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.QueryResults;
import org.kie.api.runtime.rule.QueryResultsRow;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class test {
    public static void main(String[] args) throws InterruptedException {
        //设置 drools的日期格式
        System.setProperty("drools.dateformat","yyy-MM-dd");
        //获取服务
        KieServices kieServices = KieServices.Factory.get();
        //通过服务获取容器
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        //通过容器获取 KieSession ，通过这个和规则打交道
//        KieSession kieSession = kieClasspathContainer.newKieSession();
        KieSession kieSession1 = kieClasspathContainer.newKieSession();

        kieSession1.insert("s");
        int i = kieSession1.fireAllRules();
        System.out.println(i);
        kieSession1.dispose();//关闭规则

    }


    private static void 查询规则(KieSession kieSession) {
        Order o1 = new Order();
        o1.setAmt(234);
        o1.setScore(666);
        Order o2 = new Order();
        o2.setAmt(15);
        o2.setScore(666);
//        定时触发(kieSession);
        kieSession.insert(o1);//放入参数
        kieSession.insert(o2);//放入参数

        //i=触发规则的次数   不包含  查询
        int i = kieSession.fireAllRules();//执行规则
        System.out.println(i);

        //执行查询规则
        QueryResults query_1 = kieSession.getQueryResults("query_1");
        for (QueryResultsRow q:query_1){
            Order o = (Order)q.get("$order");
            System.out.println(o);
        }


        QueryResults query_2 = kieSession.getQueryResults("query_2",555);
        for (QueryResultsRow q:query_2){
            Order o = (Order)q.get("$order");
            System.out.println(o);
        }
    }

    private static void 定时触发(KieSession kieSession) throws InterruptedException {
        //获取指定的组进行执行
        kieSession.getAgenda().getAgendaGroup("001").setFocus();

        //设置全局变量    执行规则后，会进行数据添加，会体现出来
        kieSession.setGlobal("m001",new HashMap<>());

        new Thread(()->{
            kieSession.fireUntilHalt();
        }).start();

        TimeUnit.SECONDS.sleep(10000);
        kieSession.halt();
    }

}
